package businessLayer;
import java.util.*;

import jdk.nashorn.internal.codegen.types.BooleanType;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import domain.Lehrveranstaltung;
/**
 * Implementierung der BusinessLayer Klasse Lehrveranstaltung, implementiert das Interface BLCRUD fuer Create, Read, Update und Delete Operationen auf einer Aufzaehlung.
 * 
 * @author Kai Gutzeit
 * @version 13.12.2014
 */
public class BLLehrveranstaltung implements BL_CRUD<Lehrveranstaltung>
{
    // Instanzvariable welche die Referenz der Geschaeftsobjekte in einer Aufzaehlung beinhaltet.
    private List<Lehrveranstaltung> lehrveranstaltungen;
	// Logger der BLLehrveranstaltung Klasse.
	private static final Logger logger = LoggerFactory.getLogger(BLLehrveranstaltung.class);
    /**
     * Konstruktormethode welche die Referenz zu den vorhandene Lehrveranstaltungen uebergeben bekommt.
     * 
     * @param  iLehrveranstaltungen Eine Referenz zur Aufzaehlung der verfuegbaren Lehrveranstaltungen.
     */
    public BLLehrveranstaltung(List<Lehrveranstaltung> iLehrveranstaltungen)
    {
        lehrveranstaltungen = iLehrveranstaltungen;
    }

    /**
     * Implementierung der Create Methode aus dem Interface BL_CRUD
     * 
     * @param  iBusinessObject uebergibt die Referenz zu einer Lehrveranstaltung, welche der Referenz der privaten Variable iLehrveranstaltungen hinzugefuegt wird.
     * 
     * @return  Der erstellte Lehrveranstaltung mit einer eindeutig erzeugten UUID als ID.
     * 
     * @exception IllegalArgumentException Die zu implementierende Methode kann eine IllegalArgumentException werfen in welcher Detail Information zum Fehlschlagen der Operation enthalten sind.
     */
    public Lehrveranstaltung Create(Lehrveranstaltung iBusinessObject) throws IllegalArgumentException{
    	Boolean lvIsExisting = false;
    	
    	for(Lehrveranstaltung lv : lehrveranstaltungen){
    		if(lv.getLvNo() == iBusinessObject.getLvNo()){
    			lvIsExisting = true;
    		}
    	}
    	
    	if(lvIsExisting){
            logger.debug(iBusinessObject.toString() + " existiert bereits!");
    	}else{
            lehrveranstaltungen.add(iBusinessObject);
    	}

        return iBusinessObject;
    }
    
     /**
     * Die Read Methode erlaubt es anhand eines eindeutigen Schluessels eine Lehrveranstaltung aus der Aufzaehlung iLehrveranstaltungen zu erhalten. 
     * 
     * @param  id  Es wird eine eindeutige id vom Typ UUID uebergeben um den Lehrveranstaltung eindeutig identifizierbar zu machen.
     * 
     * @return Das zu lesende Objekt vom Typ Lehrveranstaltung.
     * 
     * @exception IllegalArgumentException Die zu implementierende Methode kann eine IllegalArgumentException werfen in welcher Detail Information zum fehlschlagen der Operation enthalten sind.
     */
    public Lehrveranstaltung Read(UUID id) throws Exception{
        return null;
    }
    
     /**
     * Die Update Methode uebermittelt ein komplettes Objekt vom Typ Lehrveranstaltung und sorgt fuer das aktualisieren des jeweiligen Objektes in der privaten Aufzaehlung iLehrveranstaltungen.
     * 
     * @param  iBusinessObject Es wird das zu aktualisierende Objekt vom Typ Lehrveranstaltung uebergeben.
     * 
     * @return Ein boolscher Wert fuer den Erfolg oder Nichterfolg der Update-Operation.
     * 
     * @exception IllegalArgumentException Die zu implementierende Methode kann eine IllegalArgumentException werfen in welcher Detail Information zum fehlschlagen der Operation enthalten sind.
     */
    public Boolean Update(Lehrveranstaltung iBusinessObject) throws Exception{
        return null;
    }
    
     /**
     * Die Delete Methode bekommmt eine id als UUID Objekt uebergeben, welches das Objekt vom Typ Lehrveranstaltung aus einer Aufzaehlung eindeutig identifiziert und anschliessend entfernt.
     * 
     * @param  UUID id Es wird eine eindeutige id vom Typ UUID uebergeben.
     * 
     * @return Ein boolscher Wert fuer den Erfolg oder Nichterfolg der Delete-Operation.
     * 
     * @exception IllegalArgumentException Die zu implementierende Methode kann eine IllegalArgumentException werfen in welcher Detail Information zum fehlschlagen der Operation enthalten sind.
     */
    public Boolean Delete(UUID id) throws Exception{
        return null;
    }
}
